Timeout Handling এর মাধ্যমে একটি অপারেশন নির্দিষ্ট সময়ের মধ্যে সম্পন্ন করা হয় কি না তা নিশ্চিত করা হয়। এটি মাল্টি-থ্রেডেড অ্যাপ্লিকেশনগুলোতে অপরিহার্য, যেখানে লম্বা সময়ের জন্য একটি থ্রেড আটকে থাকলে অ্যাপ্লিকেশনের কর্মক্ষমতা প্রভাবিত হতে পারে।
invokeAll()
বা invokeAny()
ব্যবহার।get(timeout, unit)
মেথড ব্যবহার।tryLock()
ব্যবহার।import java.util.concurrent.*;
public class TimeoutExample {
public static void main(String[] args) {
ExecutorService executor = Executors.newSingleThreadExecutor();
Callable<String> task = () -> {
Thread.sleep(3000); // Simulating long-running task
return "Task Completed";
};
Future<String> future = executor.submit(task);
try {
String result = future.get(2, TimeUnit.SECONDS); // Timeout after 2 seconds
System.out.println(result);
} catch (TimeoutException e) {
System.out.println("Task timed out");
future.cancel(true); // Cancel the task
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
} finally {
executor.shutdown();
}
}
}
import java.util.concurrent.locks.ReentrantLock;
public class LockTimeoutExample {
public static void main(String[] args) {
ReentrantLock lock = new ReentrantLock();
Thread thread = new Thread(() -> {
try {
if (lock.tryLock(2, TimeUnit.SECONDS)) { // Try acquiring lock for 2 seconds
try {
System.out.println("Lock acquired");
Thread.sleep(3000); // Simulating work
} finally {
lock.unlock();
}
} else {
System.out.println("Could not acquire lock within timeout");
}
} catch (InterruptedException e) {
e.printStackTrace();
}
});
thread.start();
}
}
Asynchronous Computation এর মাধ্যমে একটি কাজ ব্যাকগ্রাউন্ডে সম্পন্ন করা হয় এবং এর ফলাফল প্রস্তুত হলে কেবল তখন থ্রেডের সাথে যোগাযোগ করা হয়। এটি CPU ব্যবহার বাড়ায় এবং UI-কে রেসপন্সিভ রাখে।
submit()
বা invokeAll()
।import java.util.concurrent.CompletableFuture;
public class AsyncComputationExample {
public static void main(String[] args) {
CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
try {
Thread.sleep(2000); // Simulating long task
System.out.println("Task completed asynchronously");
} catch (InterruptedException e) {
e.printStackTrace();
}
});
System.out.println("Main thread continues...");
// Waiting for the asynchronous task to complete
future.join();
}
}
import java.util.concurrent.CompletableFuture;
public class CompletableFutureChaining {
public static void main(String[] args) {
CompletableFuture.supplyAsync(() -> {
return "Step 1 Result";
}).thenApply(result -> {
System.out.println(result);
return "Step 2 Result";
}).thenAccept(result -> {
System.out.println(result);
}).exceptionally(ex -> {
System.out.println("Exception: " + ex.getMessage());
return null;
});
}
}
import java.util.concurrent.*;
public class ExecutorServiceExample {
public static void main(String[] args) throws InterruptedException {
ExecutorService executor = Executors.newCachedThreadPool();
Callable<Integer> task1 = () -> {
Thread.sleep(1000);
return 10;
};
Callable<Integer> task2 = () -> {
Thread.sleep(2000);
return 20;
};
Future<Integer> future1 = executor.submit(task1);
Future<Integer> future2 = executor.submit(task2);
System.out.println("Tasks submitted. Main thread continues...");
try {
int result1 = future1.get();
int result2 = future2.get();
System.out.println("Result: " + (result1 + result2));
} catch (ExecutionException e) {
e.printStackTrace();
} finally {
executor.shutdown();
}
}
}
import java.util.concurrent.*;
public class AsyncTimeoutExample {
public static void main(String[] args) {
ExecutorService executor = Executors.newSingleThreadExecutor();
Callable<String> task = () -> {
Thread.sleep(4000); // Simulate a long task
return "Task Completed";
};
Future<String> future = executor.submit(task);
CompletableFuture.runAsync(() -> {
try {
System.out.println("Result: " + future.get(2, TimeUnit.SECONDS)); // Timeout of 2 seconds
} catch (TimeoutException e) {
System.out.println("Task timed out");
future.cancel(true); // Cancel the task
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}).join();
executor.shutdown();
}
}
CompletableFuture API এবং Future API ব্যবহার করে সহজেই টাইমআউট এবং অ্যাসিঙ্ক্রোনাস প্রক্রিয়া বাস্তবায়ন করা যায়।
Read more